package mess;

import java.time.OffsetDateTime;
import java.util.concurrent.locks.ReentrantReadWriteLock;

public class LeeCode_29 {
    public static void main(String[] args) {
        System.out.println(divide(Integer.MIN_VALUE, 1));
    }

    private static int divide(int dividend, int divisor) {
        if (dividend == 0)
            return 0;
        double res = 0;
        double d1 = dividend;
        double d2 = divisor;
        int tmp = (d1 < 0 && d2 < 0) || (d2 > 0 && d1 > 0) ? 1 : -1;
        d1 = d1 < 0 ? -d1 : d1;
        d2 = d2 < 0 ? -d2 : d2;
        while (d1 >= d2){
            int i = 31;
            while (d1 / (1 << i) < d2){
                i--;
            }
            d1 -= (1 << i) * d2;
            res += (1 << i);
        }
        res *= tmp;
        if (res > Integer.MAX_VALUE){
            return Integer.MAX_VALUE;
        }
        if (res < Integer.MIN_VALUE){
            return Integer.MIN_VALUE;
        }
        return (int) res;
    }
}
